package com.scott.crm.user.utils;

import com.scott.crm.user.bean.UserBean;
import org.springframework.stereotype.Component;
import org.springframework.util.DigestUtils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

@Component
public class UserUtils {

    /**
     * 方法描述:密码MD5加密
     *
     * @author: 周海燕
     * @date: 2021/11/25 9:42 [userBean] java.lang.String
     */
    public static String md5(UserBean user) {
        String md5Password = DigestUtils.md5DigestAsHex(user.getPassword().getBytes());
        return md5Password;
    }


    /**
     * 方法描述:判断是否为手机号的方法
     * @author: 周海燕
     * @date: 2021/12/4 15:33 [phone]
     */
    public static boolean isPhone(String phone) {
        String regex = "^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(16[5,6])|(17[0-8])|(18[0-9])|(19[1、5、8、9]))\\d{8}$";
        Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(phone);
        return m.matches();
    }


    /**
     * 方法描述:密码校验：字母加数字   长度不小于8，不大于18
     * @author: 周海燕
     * @date: 2021/12/4 16:28 [str]
     */
    public static boolean isQualifiedPassword(String password) {
        boolean isDigit = false;//定义一个boolean值，用来表示是否包含数字
        boolean isLetter = false;//定义一个boolean值，用来表示是否包含字母

        for (int i = 0; i < password.length(); i++) {
            if (Character.isDigit(password.charAt(i))) {   //用char包装类中的判断数字的方法判断每一个字符
                isDigit = true;
            } else if (Character.isLetter(password.charAt(i))) {  //用char包装类中的判断字母的方法判断每一个字符
                isLetter = true;
            }
        }
        //密码的正则规则 8到18位  包含数字 大写或小写字母
        String regex = "^([a-zA-Z0-9]){8,12}$";
        boolean isRight = isDigit && isLetter && password.matches(regex);
        return isRight;
    }
}
